在使用row_number() over partition by过程中,发现取得值与预期的结果不符
话不多说,SQL如下
select *
from (select faccountnum,
faccountcode,
faccounttype,
forgancode,
row_number() over(partition by faccountcode order by fchecktime desc) as rn
from qsaccount b
where fcheckstate = '1'
and faccounttype in ('12', '3', 'dzzh', '16')
and faccountcode in ('9040510012269017')) t
row_number() over partition by 的作用就无需赘述了,我只大概讲一下我的业务需求。 由于有些账户他有多个机构,我只取一个,在账户表中按照账号进行分组,然后按照审核时间进行排序,取最新的一条记录 效果如下图所示: 我们发现,现在的结果是预期的们只需要我们选择rn=1的就是我们想要的结果 然而当我增加上了where rn=1的时候却发生了意想不到的结果,如下图所示: 他取到的结果却是和我们预期相反。 这个SQL翻来覆去就这么多,想了半天也没想出个结果来。 后来却是发现了了原因: 原来在over partition by order by的时候,我order by的字段fchecktime 他在原表中是一个空(null)值,导致我最终的结果有误,后来,多增加了一个order by 条件,上述问题就解决了 这个问题看SQL是看不出来的,SQL没问题的情况下就是数据有问题了。Mark一下。 如有问题,请随时联系沟通。
|